package com.example.contextcube.base;

import android.content.Context;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.example.contextcube.util.FontSizeManager;
import com.example.contextcube.util.LocaleManager;

import java.util.Locale;

/**
 * 基础Activity类，所有Activity都应继承此类
 * 用于统一处理字体大小和语言等设置
 */
public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void attachBaseContext(Context newBase) {
        // 应用当前语言设置
        Context context = updateBaseContextLocale(newBase);
        
        // 应用当前字体大小设置
        context = FontSizeManager.getInstance().createConfigurationContext(context);
        
        super.attachBaseContext(context);
    }

    /**
     * 更新Context的语言设置
     */
    private Context updateBaseContextLocale(Context context) {
        String language = LocaleManager.getInstance().getLanguage(context);
        return LocaleManager.getInstance().setLocale(context, language);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // 强制设置为LTR布局方向
        getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
        
        // 配置变更时（如旋转屏幕）保持字体大小设置
        applyFontScale(newConfig);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 确保当前显示使用正确的字体大小
        applyFontScale(getResources().getConfiguration());
        
        // 强制设置为LTR布局方向
        getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
    }

    /**
     * 应用字体缩放
     * @param config 配置对象
     */
    private void applyFontScale(Configuration config) {
        String currentSize = FontSizeManager.getInstance().getCurrentFontSize(this);
        float targetScale = FontSizeManager.getInstance().getFontScale(currentSize);
        
        if (Math.abs(config.fontScale - targetScale) > 0.01f) {
            // 如果当前字体缩放与目标不一致，重新应用
            Configuration configuration = new Configuration(config);
            configuration.fontScale = targetScale;
            
            // 确保应用了正确的语言设置
            String language = LocaleManager.getInstance().getLanguage(this);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                configuration.setLocale(new Locale(language));
            } else {
                configuration.locale = new Locale(language);
            }
            
            getResources().updateConfiguration(configuration, 
                    getResources().getDisplayMetrics());
        }
    }
} 